package com.aiwei.tdjk.service;

import com.aiwei.tdjk.bean.Pager;
import com.aiwei.tdjk.dto.request.GetAuthPagerRequest;
import com.aiwei.tdjk.entity.Auth;

import java.util.List;
import java.util.Set;

/**
 * Created by yanfeng on 2016/12/13.
 */
public interface AuthService {

    Auth get(Long id);

    void update(Auth auth);

    /**
     * 根据用户信息获取 角色
     * 1.1、用户  根据用户绝对匹配
     * 1.2、组织机构 根据组织机构绝对匹配 此处需要注意 祖先需要自己获取
     * 1.3、工作职务 根据工作职务绝对匹配 此处需要注意 祖先需要自己获取
     * 1.4、组织机构和工作职务  根据组织机构和工作职务绝对匹配 此处不匹配祖先
     * 1.5、组  根据组绝对匹配
     *
     * @param userId             必须有
     * @param groupIds           可选
     * @param organizationIds    可选
     * @param jobIds             可选
     * @param organizationJobIds 可选
     * @return
     */
     Set<Long> findRoleIds(Long userId, Set<Long> groupIds, Set<Long> organizationIds, Set<Long> jobIds, Set<Long[]> organizationJobIds) ;


    Pager<Auth> find(GetAuthPagerRequest request);



    int delete(Long id);

    int delete(Long[] ids);

    void addUserAuth(Long[] userIds, Auth m);

    /**
     *
     * @param groupIds
     * @param m
     */
    void addGroupAuth(Long[] groupIds, Auth m);

    void addOrganizationJobAuth(Long[] organizationIds, Long[][] jobIds, Auth m);
    /**
     * 根据角色查找用户ids
     */
    Set<Long> findUserIdsByRoleIds(List<String> roleIds);

    /**
     * 过滤所有已有用户，最终得到对应角色的用户
     * @param laneUserIds
     * @return
     */
    List<Long> getUsersOfRoleByRoleIds(List<Long> laneUserIds,List<String> roleIds);

    /**
     * 根據角色查用戶組
     */
    List<Long> findGroupIdsByRoleIds(List<String> roleIds);
    /**
     * 根据登陆用户id获取其角色
     */
    String getRoleByUserId(Long userId);

}
